package com.ostente.sceos.aplicativo.apresentacao.controle;

import java.io.Serializable;
import java.util.Collection;

import javax.annotation.Resource;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.ostente.sceos.aplicativo.entidade.Categoria;
import com.ostente.sceos.aplicativo.excecao.MensagemException;
import com.ostente.sceos.aplicativo.negocio.servico.ManterCategoriaServico;
import com.ostente.sceos.aplicativo.util.BeanAbstrato;

@Controller
@Scope("session")
public class ManterCategoriaBean extends BeanAbstrato implements Serializable {

	private static final long serialVersionUID = 6929354581362565850L;
	
	private Categoria entidade;
	private Categoria entidadeAux;
	private static final String PAGINA_INICIAL = "/paginas/controle/configuracao/mantercategoria/inicial.jsf";
	
	@Resource
	private ManterCategoriaServico service;
	
	/**
	 * M�todo respons�vel por iniciar o caso de uso
	 * 
	 * @return String com a pagina inicial do caso de uso
	 */
	public String abrirPaginaInicial(){
		return ManterCategoriaBean.PAGINA_INICIAL;
	}
	
	/**
	 * M�todo respons�vel por salvar uma categoria no banco.
	 * 
	 * @param entidade
	 * @return mensagem 
	 * @author waltenes.sardinha
	 */
	public void salvarCategoria() throws Exception{
		 
		try {
			String msg = this.service.salvarCategoria(this.getEntidade());
			limparCampo();
			this.setMensagem(msg, MSG_TIPO_INFORMACAO, "");
		}catch (final MensagemException e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_AVISO, "");
		}catch (final Exception e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_ERRO, "");
		}
	}
	
	/**
	 * M�todo responsavel por limpar o campo da tela.
	 */
	public void limparCampo() {
		entidade = null;
	}
	
	/**
	 * 
	 * @return Consulta com todas categorias
	 * @throws Exception
	 */
	public Collection<Categoria> getTodasCategorias() throws Exception {
		return this.service.consultarTodasCategorias();
	}

	/**
	 * @return the entidade
	 */
	public Categoria getEntidade() {
		if (entidade == null) {
			entidade = new Categoria();
		}
		return entidade;
	}

	/**
	 * @param entidade the entidade to set
	 */
	public void setEntidade(Categoria entidade) {
		this.entidade = entidade;
	}

	/**
	 * @return the entidadeAux
	 */
	public Categoria getEntidadeAux() {
		if (entidadeAux == null) {
			entidadeAux = new Categoria();
		}
		return entidadeAux;
	}

	/**
	 * @param entidadeAux the entidadeAux to set
	 */
	public void setEntidadeAux(Categoria entidadeAux) {
		this.entidadeAux = entidadeAux;
	}
}